#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 25000010;//因为是两个数的全排。所以要相乘
struct st 
{
    int c,d,val;
    bool operator < (const st & t)const
    {
        if(val != t.val)
        {
            return val < t.val;
        }
        if(c != t.c)
        {
            return c < t.c;
        }
        return d < t.d;
    }
    
}qt[N];
int n ;
int main()
{
    cin >> n;
    int k =0;
    //确定枚举c d
    //将c的平方和d的平方的和存起来，还有c,d也要进行存储这样就要开一个很大的结构体数组
    //而是且排序逻辑也要变重新定义小于号
    for(int i = 0;i * i <= n;i++ )
    {
        for(int j = i;j * j + i * i <= n;j++)
        {
            qt[k++] = {i,j,i * i + j * j};
        }
    }
    sort(qt,qt + k);
    for(int i = 0;i * i <= n;i++)
    {
        for(int j = 0;j * j + i * i<= n;j++)
        {
            int t = n - i * i - j * j;
           //进行二分查找
           int l = 0;
           int r = k - 1;
          
          int mid = 0;
           while(l < r)
           {
             mid = l + r >> 1;
               if(qt[mid].val < t)
               {
                   l = mid + 1;
               }
               else
               {
                   r = mid;
               }
           }
           if(qt[l].val == t)//因为最后是左右是最后重合的
           {
               cout << i << ' ' << j << ' ' << qt[l].c << ' ' << qt[l].d << endl;
               return 0;
           }
        }
    }
    return 0;
}